package mx.itesm.twritter.server.ontology;
import java.math.BigInteger;

import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

//import java.util.ArrayList;

import mx.itesm.twritter.server.parser.ParsedTweet;
//import mx.itesm.twritter.parser.ProcessedTweet;

//import winterwell.jtwitter.OAuthSignpostClient;
//import winterwell.jtwitter.Status;
import winterwell.jtwitter.Twitter;

public class TwitterCalls {
	private static final int MAX_TWEETS = 200;
	//public List<winterwell.jtwitter.Status> tweets;
	public static BigInteger sinceID = null;//setSinceId;
	public Timer timer;

	/**
	 * Executes the Task Timeline every given seconds
	 * @param seconds 
	 */
	public TwitterCalls(int seconds) {
		timer = new Timer();
	    timer.schedule(new Timeline(), 0, seconds * 1000);
	}

	/**
	 * Returns the last MAX_TWEETS from the given user
	 * 
	 * @param user the user's twitter name to be used
	 * @return List of twitter statuses.
	 */
	public static List<winterwell.jtwitter.Status> getTimelineFromUser(String user) {

		/*****************************************************
		 * CREA UN OBJETO JTWIT QUE NOS PERMITE HACER LLAMADAS A TWITTER Y 
		 * CONFIGURAR LOS PARAMETROS COMO EL MAXIMO DE TWEETS Y DESDE DONDE
		 * TRAE LOS TWEETS (SINCEID). 
		 * SE PONE EL LIMITE, SE TRAEN LOS TWEETS, SE SACA EL ID DEL ULTIMO
		 * Y SE PONE COMO EL PARAMETRO DESDE EL CUAL TIENE QUE TRAERNOS
		 * LOS TWEETS EN LA SEGUNDA ITERACION. SE IMPRIME Y REGRESA LA LISTA
		 * DE STATUS (TWEETS) QUE SE OBTIENEN, SIN PARSEAR.
		 * LA CLASE PARSEDTWEET HACE USO DE ESTE METODO PARA HACER EL PARSEO
		 * DE LA LISTA Y SACA AL ARCHIVO DE TEXTO SOLO LOS QUE FUERON "CORRECTAMENTE"
		 * PARSEADOS.. AUNQUE EL BUENOS DIAS FALLE TODAVIA :(
		 *****************************************************/
		List<winterwell.jtwitter.Status> tweets;
		Twitter jtwit = new Twitter();
		jtwit.setCount(MAX_TWEETS);
		tweets = jtwit.getUserTimeline(user);
		sinceID = tweets.get(tweets.size()-1).id;
		jtwit.setSinceId(sinceID);
		//System.out.println(sinceID);

		return tweets;

		
		/*****************************************************
		 * ESTO DE AQUI ES PARA HACER LLAMADAS AUTENTICADAS
		 *****************************************************/
		
		/*
		 * for(Status tweet:jtwit.getUserTimeline(user)){
		 * if(tweet.inReplyToStatusId == null){ System.out.println("ID: " +
		 * tweet.id); System.out.println(tweet.getText());
		 * System.out.println("Hora: " + new
		 * Time(tweet.getCreatedAt().getTime()));
		 * System.out.println("--------------------------------"); } }
		 */
		/*
		 * OAuthSignpostClient client = new
		 * OAuthSignpostClient(OAuthSignpostClient.JTWITTER_OAUTH_KEY,
		 * OAuthSignpostClient.JTWITTER_OAUTH_SECRET, "oob"); Twitter jtwit =
		 * new Twitter("martuhernandez",client); // open the authorisation page
		 * in the user's browser // This is a convenience method for directing
		 * the user to client.authorizeUrl() client.authorizeDesktop(); // get
		 * the pin String v =
		 * client.askUser("Please enter the verification PIN from Twitter");
		 * client.setAuthorizationCode(v); // Optional: store the authorisation
		 * token details Object accessToken = client.getAccessToken(); new
		 * OAuthSignpostClient(OAUTH_KEY, OAUTH_SECRET,accessToken[0],
		 * accessToken[1]); // use the API!
		 * jtwit.updateStatus("response");//,jtwit.getStatus("RLN7").getId());
		 * //System.out.println(jtwit.getStatus("FnzMtz"));
		 * //System.out.println(jtwit.getStatus("RLN7"));
		 */
		}
	
		class Timeline extends TimerTask{
			//Ontology o = new Ontology();
			//ArrayList<ProcessedTweet> ptweets = new ArrayList<ProcessedTweet>();
			public void run(){
				//ArrayList<ParsedTweet> parsed = 
				/*******************************************************************
				 * BAJA LOS 200 TWEETS DESDE SINCEID (CUANDO ES NULL SON LOS ULTIMOS)
				 * Y LOS PARSEA HACIENDO USO DEL PARSER889. EN LOS METODOS DEL PARSER
				 * SE SACA LA INFO DEL TWEET PARSEADO A UN ARCHIVO DE TEXTO LLAMADO 
				 * TWEET.TXT
				 *******************************************************************/
				ParsedTweet.parseTweetsFromUser("trafico889");
				
				/*********************************************** 
				 * ESTA PARTE NOS PERMITE HACER BUSQUEDAS EN LA 
				 * ONTOLOGIA DE LAS DIFERENTES CALLES Y REGRESA UNA LISTA
				 ***********************************************/
				//getTimelineFromUser("trafico889");
//				for (ParsedTweet t : parsed) {
//					if (o.searchRoute(t.getRoute()) != null && o.searchRoute(t.getFrom()) != null
//							&& o.searchRoute(t.getTo()) != null) {
//					//if (o.searchRoute(t.getRoute()) == null || o.searchRoute(t.getFrom()) == null
//						//	|| o.searchRoute(t.getTo()) == null){
//						/*System.out.println("Route: " + t.getRoute() + " "
//								+ o.searchRoute(t.getRoute()));
//						System.out.println("From: " + t.getFrom() + " "
//								+ o.searchRoute(t.getFrom()));
//						System.out.println("To: " + t.getTo() + " "
//								+ o.searchRoute(t.getTo()));
//						System.out.println("-------------------------------");*/
//						ProcessedTweet p = new ProcessedTweet(o.searchRoute(t.getRoute()),o.searchRoute(t.getFrom()),o.searchRoute(t.getTo()));
//						ptweets.add(p);
//						System.out.println(p);
//					}
//				}
				//System.exit(0);
		}
	}
}
